// 目标：对数组进行冒泡排序
// TODO: 补全排序逻辑
fn bubble_sort(arr: &mut [i32]) {
    let len = arr.len();
    for i in 0..len {
        //for j in 0..len - i - 1 {
        //    // 比较并交换相邻元素
        //}
        for j in 0..len.saturating_sub(i + 1) { // 安全边界处理
            if arr[j] > arr[j + 1] {
                arr.swap(j, j + 1); // 使用标准库交换方法
            }
        }	
    }
}

#[test]
fn test_bubble_sort() {
    //let mut arr = [5, 3, 4, 1, 2];
    //bubble_sort(&mut arr);
    //assert_eq!(arr, [1, 2, 3, 4, 5]);
    let mut test_cases = [
        (vec![5, 3, 4, 1, 2], vec![1, 2, 3, 4, 5]),
        (vec![1], vec![1]),
        (vec![2, 1], vec![1, 2]),
        (vec![3, 1, 2], vec![1, 2, 3]),
    ];

    for (input, expected) in &mut test_cases {
        bubble_sort(input);
        assert_eq!(input, expected);
    }
}

// 添加可视化演示
fn main() {
    let mut arr = [64, 34, 25, 12, 22, 11, 90];
    println!("Original array: {:?}", arr);
    
    bubble_sort(&mut arr);
    println!("Sorted array:   {:?}", arr);
}
